#####################################################################################
#
# 读取 hao123.com 首页，使用类的方式重新组织代码
#
#####################################################################################

from bs4 import BeautifulSoup
import requests

class hao123_crawler:
    # 网址属性，hao123首页
    url = 'https://www.hao123.com/'

    def __init__(self):
        """
        初始化方法，可以使用参数。
        """
        pass
        
    def read_url(self):
        # 使用 requests 获取网页内容
        response = requests.get(self.url)

        # 中文乱码问题
        response.encoding = 'utf-8'

        # 打印响应内容
        # print(response.text)

        # 检查请求是否成功
        if response.status_code == 200:
            # 使用 BeautifulSoup 解析网页
            # 使用 lxml 解析器
            soup = BeautifulSoup(response.text, 'lxml')
        
            # 打印 <title> 标签
            self.print_title_text(soup)

            # 打印第一个 <a> 标签
            self.print_first_link(soup)

            # 打印所有的 <a> 标签
            self.print_all_links(soup)

            # 检查脚注标签是否存在？
            self.check_footer_tag(soup)

            # 打印所有 class="item" 标签
            self.print_item_links(soup)


    def print_title_text(self, soup: BeautifulSoup):
        """
        打印 <title> 标签
        """
        title_tag = soup.find('title') # 使用 find() 查找指定标签，只返回第一个
        if title_tag:
            print('标签 <title> 的内容：{}'.format(title_tag.get_text()))
        else:
            print("没有 <title> 标签")


    def print_first_link(self, soup: BeautifulSoup):
        """
        打印第一个 <a> 标签
        """
        first_link = soup.find('a') # 使用 find() 查找指定标签，只返回第一个

        if first_link:
            print('第一个 <a> 标签的 href 属性：{}'.format(first_link.get('href')))
        else:
            print('没有 <a> 标签')


    def print_all_links(self, soup: BeautifulSoup):
        """
        打印所有的 <a> 标签
        """
        all_links = soup.find_all('a') # 使用 find_all() 查找所有标签

        for link_tag in all_links:
            print('<a> 标签 {}'.format(link_tag.get('href')))


    def check_footer_tag(self, soup: BeautifulSoup):
        """
        检查脚注标签是否存在？

        查找具有 id="footer" 的 <div> 标签
        """
        footer_tag = soup.find('div', id = 'footer')

        if footer_tag:
            print('找到 footer 标签')
        else:
            print('没有 footer 标签')

    
    def print_item_links(self, soup: BeautifulSoup):
        """
        打印所有 class="item" 标签

        查找具有 class="item" 的 <a> 标签
        """
        all_links = soup.find_all('a', class_ = 'item')

        for link_tag in all_links:
            print('脚注 <a> 标签 {}'.format(link_tag.get('href')))


if  __name__  ==  '__main__':
    # 创建爬虫类的实例
    crawler = hao123_crawler()

    # 执行爬虫方法
    crawler.read_url()
